<?php
	class DocumentsController extends AppController
	{
		var $name = 'Documents';
		var $helpers = array('Html', 'Time', 'javascript', 'Form');
		var $aux=array();
		var $layout = 'menu';

        // Modelos que usa el controlador
        var $uses = array('Document','Dependency','Person', 'Correspondence', 'Recorder');
		
		/*1er bit es resolucion*/
		/*2do bit es expediente*/
		/*3er bit es respuesta*/
		var $datosAdicionales=0;

		function isSelected($valor)
		{
			/*$check = array( 1 => 'checked', 0 => 'unchecked', -1 => 'unchecked', 'on' => 'checked', 'off' => 'uncheked');
			
			$selected = $selectedPersonas = $check[$valor];

			if (!strcmp($selected,'unchecked'))
			{
				return false;
			}
			return true;*/
		}
		
		function isSelectedPersonas()
		{
			$check = array( 1 => 'checked', 0 => 'unchecked', -1 => 'unchecked', 'on' => 'checked', 'off' => 'uncheked');
			
			$selectedPersonas = 'unchecked';
			
			if (isset($this->data['Document']['destinoPersonas']) )
			{
				$selectedPersonas = $check[ $this->data['Document']['destinoPersonas'] ];
			}
			if (!strcmp($selectedPersonas,'unchecked'))
			{
				return false;
			}
			return true;
		}
		
		function isSelectedDependencia()
		{
			$check = array( 1 => 'checked', 0 => 'unchecked', -1 => 'unchecked', 'on' => 'checked', 'off' => 'uncheked');
			
			$selectedDependencia = 'unchecked';
			
			if (isset($this->data['Document']['destinoDependencia']) )
			{
				$selectedDependencia = $check[ $this->data['Document']['destinoDependencia'] ];
			}
			if (!strcmp($selectedDependencia,'unchecked'))
			{
				return false;
			}
			return true;
		}
		
		/* Valida los campos segun los datos ingresados */
		function validarFormSalida()
		{
			/* Si el documento no es del tipo expediente, no validar el campo numero_expediente */
			if  ( ( $this->Document->getTipoDescripcion( $this->data['Document']['tipo'] ) != 'Expediente' )  )
			{
				unset($this->data['Document']['numero_expediente']);
				unset($this->data['Document']['providenciaAsunto']);
				unset($this->data['Document']['providenciaObservaciones']);
			}

			if ( !($this->isSelectedDependencia()) && (!($this->isSelectedPersonas())))
			{
				$this->Document->invalidate('destino');
			}

			if ( ($this->isSelectedPersonas() ) && (empty($this->data['Person'])) )
			{
				$this->Document->invalidate('persona');
			}
	
			if ( ($this->isSelectedDependencia() ) && (empty($this->data['Document']['id_dependencia_externa'])) )
			{
				$this->Document->invalidate('id_dependencia_externa');
			}

			return $this->Document->validates($this->data);
		}

		
		/*
		 * Desc: Funcion que define las variables para el formulario del registro de salida
		 * segun el contenido de $this->data
		 * Estado: Completo
		 */
		function definirVariablesFormSalida()
		{
			$check = array( 1 => 'checked', 0 => 'unchecked', -1 => 'unchecked', 'on' => 'checked', 'off' => 'uncheked');
			$listaPersonas = $this->Person->obtenerDatosAMostrar('id_dependencia='.$this->getUserDependency());
			$listaDependencias = $this->Dependency->obtenerDatosAMostrar();
			
			$this->set('personas',$listaPersonas);
			$this->set('dependencias',$listaDependencias);
		 
			if (empty($this->data))
			{	
				$this->set('selectedTipo',1);
				$this->set('isSelectedExpediente',false);
				$this->set('selectedPersonas','unchecked');
				$this->set('selectedDependencia','unchecked');
				$this->set('selectedSolicitud','unchecked');
				$this->set('selectedNotificacion','unchecked');
				$this->set('selectedRespuesta','unchecked');
			}
			else
			{
				$this->set('selectedSolicitud','unchecked');
				$this->set('selectedNotificacion','unchecked');
				$this->set('selectedRespuesta','unchecked');
				if (isset($this->data['Document']['destinoPersonas']) )
				{
					$this->set('selectedPersonas', $check[ $this->data['Document']['destinoPersonas'] ] );
				}
				if (isset($this->data['Document']['destinoDependencia']))
				{
					$this->set('selectedDependencia', $check[$this->data['Document']['destinoDependencia'] ]);
				}
				if (!(isset($this->data['Document']['tipo']) ) )
				{ $this->data['Document']['tipo'] = 1; };
				$this->set('selectedTipo',$this->data['Document']['tipo']);
				if ( $this->data['Document']['tipo'] == 4) { $this->set('isSelectedExpediente',true); }
				else { $this->set('isSelectedExpediente',false);}
				if ( $this->data['Document']['solicitud'] == 'on' )  { $this->set('selectedSolicitud','checked'); }
				if ( $this->data['Document']['notificacion'] == 'on' ) { $this->set('selectedNotificacion','checked'); }
				if ( $this->data['Document']['respuesta'] == 'on' ) {$this->set('selectedRespuesta','checked'); }
			}
		}


		/*Desc: Funcion que define cual es el proposito del documento
		  Estado: Funcion completa
		*/

		private function definirProposito(&$document)
		{
			/*Se setean los bits de propositoAux (ver Modelo de Documento)  */
			/*segun el proposito del documento.				*/
			$propositoAux = 0;
						
			if( $document['solicitud'] )
			{
				$propositoAux = 1;
			}

			if( $document['respuesta'] )
			{
				$propositoAux = $propositoAux | 2;
			}
			
			if( $document['notificacion'] )
			{
				$propositoAux = $propositoAux | 4;
			}
			$this->data['Document']['proposito'] = $propositoAux;				
		}
		
		function archivar()
		{
			/* Titulo de la pagina */
			$this->pageTitle = 'Archivar Documento';
			
			if (isset($this->namedArgs['id']))
			{
				$id = $this->namedArgs['id'];
				$documento = $this->Document->findByid($id);
				
				if ($documento['Document']['id_bibliorato'] == ""){
					
					$titulo = "Documento Principal";
					
					$fecha = $documento['Document']['fecha_creacion'];
					
					$criteria = "(fecha_desde <= '". $fecha ."') AND (fecha_hasta IS NULL OR fecha_hasta >='". $fecha ."')";
					
					$recorders = $this->Recorder->findAll($criteria,'*',NULL,0,0,0);
					
					$relacionados = $this->Correspondence->findAll('id_documento_entrante='.$id,'*',NULL,0,0,0);
					
					$lista_recs = array();
					
					foreach($recorders as $biblio){
						// formateo la fecha
						$anioDesde = substr($biblio['Recorder']['fecha_desde'],0,4);
						$mesDesde = substr($biblio['Recorder']['fecha_desde'],5,2);
						$diaDesde = substr($biblio['Recorder']['fecha_desde'],8,2);
						$desc = $biblio['Recorder']['titulo'] . ' - ' . $diaDesde . '/' . $mesDesde . '/' . $anioDesde;
						$lista_recs[$biblio['Recorder']['id']] = $desc;
					}
					$this->set('action', 'archivar');
					$this->set('documento',$documento);
					$this->set('relacionados',$relacionados); 
					$this->set('id',$id);
					$this->set('recorders',$lista_recs);
					$this->set('titulo', $titulo);
				}
				else{
					$titulo = "El documento ya ha sido archivado";
					$this->set('titulo', $titulo);
					$this->set('action', 'yaArchivado');
					$this->set('id',$id);
					$this->set('documento',NULL);
				}
			}
			else{
				$id = $this->data['Document']['id'];
				/* Si presiono el boton cancelar */
				if ( isset($this->params['form']['Cancelar']) &&
				 $this->params['form']['Cancelar'] == 'Cancelar'){					
					$this->redirect('/documents/respuesta/'.$id);
					return;
				}
				if ( isset($this->params['form']['Aceptar']) &&
				 $this->params['form']['Aceptar'] == 'Aceptar'){
					$this->redirect('/documents/respuesta/'.$id);
					return;
				}
				foreach ($this->data['Document'] as $key => $docs):
		    		if ($docs != 0 ){
		    			$relacionado = $this->Document->findByid($key);
		    			$relacionado['Document']['id_bibliorato'] = $this->data['Document']['id_bibliorato'];
		    			$this->Document->save($relacionado);
		    		}
		    			
		    	endforeach;
				$documento = $this->Document->findByid($id);
				$documento['Document']['id_bibliorato'] = $this->data['Document']['id_bibliorato'];
				$this->Document->save($documento);
				
				$this->set('documento', NULL);
				$titulo = "Se ha archivado el documento";
				$this->set('action', 'confirmar');
				$this->set('titulo', $titulo);
				$this->set('id',$id);
			}

		}
		
		function registrarEntrada()
		{
			/* Titulo de la pagina */
			$this->pageTitle = 'Registrar Entrada';
			
			/* Si presiono el boton borrar */
			if ( isset($this->params['form']['Borrar']) &&
			 $this->params['form']['Borrar'] == 'Borrar')
			{
				unset($this->data['Document']);
				$this->Session->del('document');
				$this->redirect('/Documents/registrarEntrada');
			}
			
						
			/* Es la primera vez que se entra al formulario */
			if  ( empty($this->data['Document']))  
			{
				if ( $this->Session->check('document') )
				{
					$this->data['Document'] = $this->Session->read('document');
					$this->Session->del('document');
				}
				$this->definirVariablesFormEntrada();
			}
			else
			{

				/*Son documentos de intercambio*/
				$this->data['Document']['despacho'] = '1';
				
				/*Pertenece a la dependencia del usuario logueado*/
				$this->data['Document']['id_dependencia'] = $this->getUserDependency();

				/* Definir el proposito del documento segun los datos ingresados */
				$this->data['Document']['proposito'] = '';
				$this->definirProposito( $this->data['Document'] );
				
				/* Definir el tipo de movimiento */
				$this->data['Document']['movimiento'] = 1; // Entrada
				
				/* Setear el tipo si no fue seteado*/
				if(!isset($this->data['Document']['tipo'])){
					$this->data['Document']['tipo']=0;
				}
				if ( $this->Document->getTipoDescripcion($this->data['Document']['tipo']) == 'Expediente')
				{
					$this->data['Document']['movimiento'] = 3; // Entrada-Salida
				}
				
				if ( $this->validarFormEntrada() )
				{
					$this->Session->del('document');
					$this->Session->write('document', $this->data['Document']);
					
					$this->redirect('/Documents/confirmarRegistroEntrada');
				}
				else
				{
					/*Si falta algo o hubo algun error en el ingreso de datos */
					$this->definirVariablesFormEntrada();
				}				
			}
		}
		
		
		/*Desc: Funcion que dispara la implementacion del caso de uso registrar Salida
		  Estado: Funcion Completa
		*/
		function registrarSalida()
		{
			/* Titulo de la pagina */
			$this->pageTitle = 'Registrar Salida';
			
			/* Si presiono el boton borrar */
			if ( isset($this->params['form']['Borrar']) &&
			 $this->params['form']['Borrar'] == 'Borrar')
			{
				unset($this->data);
				$this->Session->del('data');
				$this->redirect('/Documents/registrarSalida');
			}
			
						
			/* Es la primera vez que se entra al formulario */
			if  ( empty($this->data))  
			{
				if ( $this->Session->check('data') )
				{
					$this->data = $this->Session->read('data');
					$this->Session->del('data');
				}
				$this->definirVariablesFormSalida();
			}
			else
			{
				/*Son documentos de intercambio*/
				$this->data['Document']['despacho'] = '1';
				
				/*Pertenece a la dependencia del usuario logueado*/
				$this->data['Document']['id_dependencia'] = $this->getUserDependency();
				
				/* Definir el proposito del documento segun los datos ingresados */
				$this->data['Document']['proposito'] = '';
				$this->definirProposito( $this->data['Document'] );
				
				/* Setear el tipo si no fue seteado*/
				if(!isset($this->data['Document']['tipo'])){
					$this->data['Document']['tipo']=0;
				}
				
				/* Definir el tipo de movimiento */
				$this->data['Document']['movimiento'] = 2; // Salida
				if ( $this->Document->getTipoDescripcion( $this->data['Document']['tipo'] ) == 'Expediente')
				{
					$this->data['Document']['movimiento'] = 3; // Entrada-Salida
				}
				
				if ( $this->validarFormSalida() )
				{
					/* Conversion de las fechas del formulario a fechas SQL */
					$this->fechaToSql($this->data['Document']);
			
					$this->Session->write('data', $this->data );

					$this->redirect('/Documents/confirmarRegistroSalida');
				}
				else
				{
					/*Si falta algo o hubo algun error en el ingreso de datos */
					$this->definirVariablesFormSalida();
				}				
			}
		}
		
		
		/* Valida los campos segun los datos ingresados */
		function validarFormEntrada()
		{
			
			/* Si el documento no es del tipo expediente, no validar el campo numero_expediente */
			if  ( ( $this->Document->getTipoDescripcion( $this->data['Document']['tipo'] ) != 'Expediente' )  )
			{
				unset($this->data['Document']['numero_expediente']);
			}
					
			/* Si el documento no es del tipo resolucion, no validar el campo numero_resolucion */
			if  ( ( $this->Document->getTipoDescripcion( $this->data['Document']['tipo'] ) != 'Resolucion' )  )
			{
				unset($this->data['Document']['numero_resolucion']);
			}
			
			$valid = true;
			if ( empty($this->data['Document']['id_dependencia_externa']) )
			{
				$this->Document->invalidate('id_dependencia_externa');
				$valid = false;
			}
			if ( empty($this->data['Document']['id_persona_autor']) )
			{
				$this->Document->invalidate('id_persona_autor');
				$valid = false;
			}

			return $valid && $this->Document->validates($this->data);
		}
		
		/*
		 * Descripcion: Muestra el contenido de los datos ingresados, el usuario podra confirmar,
		 * cancelar o modificarlos
		 * Estado: Completo
		 * 
		 */
		function confirmarRegistroEntrada()
		{
			/* Titulo de la pagina */
			$this->pageTitle = 'Confirmacion de Registro de Documentacion entrante.';
			
			/* Leo los datos guardados en la sesion */
			$document = $this->Session->read('document');
			
			/* Conversion de las fechas del formulario a fechas SQL */
			$this->fechaToSql($document);

			$document['propositoDesc'] = $this->Document->getPropositoDesc($document['proposito']);
			$document['tipoDesc'] = $this->Document->getTipoDescripcion( $document['tipo'] );
			$document['tipoResolucionDesc'] = $this->Document->getTipoResolucionDesc($document['tipo_resolucion']);
			$document['autorDesc'] = $this->Person->obtenerPersonaFormateda($document['id_persona_autor']);

			/* Seteo las variables para la vista */
			$this->Session->write('document',$document);
			$this->set('document', $document);	
		}


		/*
		 * Descripcion: Muestra el contenido de los datos ingresados, el usuario podra confirmar,
		 * cancelar o modificarlos
		 * Estado:Completo
		 * 
		 */
		function confirmarRegistroSalida()
		{
			/* Titulo de la pagina */
			$this->pageTitle = 'Confirmacion de Registro de Documentacion saliente.';
			
			/* Leo los datos guardados en la sesion */
			$data = $this->Session->read('data');
			$document = $data['Document'];
						
			$document['propositoDesc'] = $this->Document->getPropositoDesc($document['proposito']);
			$document['tipoDesc'] = $this->Document->getTipoDescripcion( $document['tipo'] );
			
			/* Destinatarios del documento de salida */
			$listaPersonas = $this->Person->obtenerDatosAMostrar('id_dependencia='.$this->getUserDependency());
			$listaDependencias = $this->Dependency->obtenerDatosAMostrar();
			
			if ( !($document['destinoDependencia']) )
			{
				unset($document['id_dependencia_externa']);				 
			}
			else
			{
				if (!empty($listaDependencias))
				{$destinatarios[-1] = $listaDependencias[$document['id_dependencia_externa']];}
			}
			
			if ( !($document['destinoPersonas']) )
			{				
				unset($data['Person']);
			}
			else
			{
				$destinatarios_personas = $data['Person'];
				if (!empty($listaPersonas) ) {
					foreach ($destinatarios_personas['Person'] as $idPersona )
					{
						$destinatarios[$idPersona] = $listaPersonas[$idPersona];
					}
					$data['Person'] = $destinatarios_personas;
				}
			}
			
			/* Limpio el registro que se va a guardar en la BD */
			$data['Document'] = $document;
			$this->Session->write('data',$data);
			
			/* Seteo las variables para la vista */
			$this->set('document', $document );	
			$this->set('destinatarios', $destinatarios );
		}

		
		/*
		 * Descripcion: Guarda el registro de Entrada en la base de datos
		 * Estado: Completo
		 * 
		 */
		function guardarRegistroEntrada()
		{
			/* Si presiono el boton Cancelar */
			if ( isset($this->params['form']['Cancelar']) &&
			 $this->params['form']['Cancelar'] == 'Cancelar')
			{
				$this->Session->del('document');
				$this->redirect('/');				
			}
			
			
			$document = $this->Session->read('document');
			if ( $this->Document->save($document) )
			{
				$id = $this->Document->getLastInsertId();
				$this->Session->del('document');
	
				$esRespuesta = $document['respuesta'];
				if($esRespuesta)
				{
					$redireccion="/documents/respuesta/$id";	
				}else
				{
					$redireccion="/";
				}
				
				$this->redirect("$redireccion");
			}
			else
			{
				$this->flash('Sus datos no se han podido guardar.','/documents/registrarEntrada');
			}		  
		}
		
		
		/*
		 * Descripcion: Guarda el registro de salida en la base de datos
		 * Estado: Completo
		 * 
		 */
		function guardarRegistroSalida()
		{
			/* Si presino el boton Cancelar */
			if ( isset($this->params['form']['Cancelar']) &&
			 $this->params['form']['Cancelar'] == 'Cancelar')
			{
				$this->Session->del('data');
				$this->redirect('/');				
			}
			
			
			$data = $this->Session->read('data');
			if ( $this->Document->save($data) )
			{
				$id = $this->Document->getLastInsertId();
				$this->guardarProvidencia( $id, $data );
				$this->set('id', $id);
				$this->Session->del('data');
				switch ($data['Document']['proposito'])
				{
					case '2':
					case '3':
					case '6': 
					case '7': $this->redirect('/documents/respuesta/'.$id);
							  break;
					default: $this->redirect('/documents/ver_datos_y_documentos_relacionados/' . $id);
				}
			}
			else
			{
				$this->flash('Sus datos no se han podido guardar.','/documents/registrarSalida');
			}		  
		}
		
		
		/*
		 * Desc: Funcion que define las variables para el formulario del registro de Entrada
		 * segun el contenido de $this->data
		 * Estado: Completo
		 */
		function definirVariablesFormEntrada()
		{
			$this->set('personas',$this->Person->obtenerDatosAMostrar('id_dependencia='.$this->getUserDependency()));
			$this->set('dependencias',$this->Dependency->obtenerDatosAMostrar());			
		}
		
		/*Desc: La siguiente funcion recibe un fecha en el formato ingresado por el usuario y modifica este formato al aceptado por la tabla. 
		La hora, minutos y segundos los descarto porque los considero 	innecesarios, de todas formas de considerarlos importantes se pueden considerar, todos o algunos de los datos descartados.
		  Estado: Funcion completa
		*/
		private function fechaToSql(&$document)
		{

		  /*Modifica la fecha de creacion al formato aceptado por SQL*/
 		  $document['fecha_creacion']=$document['fecha_creacion_year'].'-'.$document['fecha_creacion_month'].'-'.$document['fecha_creacion_day'].' 00:00:00';

		  /*Modifica la fecha de ingreso al formato aceptado por SQL*/
		  if ( !(empty($document['fecha_ingreso_year']) ) )
		  {
		  	$document['fecha_ingreso']=$document['fecha_ingreso_year'].'-'.$document['fecha_ingreso_month'].'-'.$document['fecha_ingreso_day'].' 00:00:00';
		  }
		  
		  if ( !(empty($document['fecha_egreso_year'] ) ) )
		  {
		  	$document['fecha_egreso']=$document['fecha_egreso_year'].'-'.$document['fecha_egreso_month'].'-'.$document['fecha_egreso_day'].' 00:00:00';
		  }

		}

	
		/*Desc: La siguiente funcion recibe el id del documento de tipo respuesta
			recientemente ingresado, este dato se lo mandara a la vista, la cual 
			expondra las opciones de asociar doc y archivar doc.
			Si el usuario decide precionar el boton "Continuar", se volvera al menu principal.
		  Estado: Funcion completa
		*/
		
		function respuesta($id=null)
		{
			
			/*Le manda el id del documento a la vista*/	
			$this->set('id',$id);

			/* Si presino el boton Continuar */
			if ( isset($this->params['form']['Continuar']) &&
			 $this->params['form']['Continuar'] == 'Continuar')
			{
				
				$this->redirect('/');				
			}
			
		
		}

		/*Desc: Permite el ingreso de la consulta a realizar.
		*/
		function ingresar_datos_busqueda()
		{
			$this->set('lista_personas', $this->Person->obtenerDatosAMostrar('id_dependencia='.$this->getUserDependency()));
			$this->set('lista_dependencias', $this->Dependency->obtenerDatosAMostrar());
		}



		/*Desc: Resuelve la consulta a partir de los datos ingresados y devuelve el
		  resultado en forma de tabla.
		*/
		function resultados_busqueda()
		{
			if (!empty($this->params))
			{
				if (!empty($this->params['form']))
				{
					//Primero debo separar los datos ingresados en el formulario y
					//verificar que sean validos.
					$parametros_busqueda = $this->separarParametros($this->params['form']);
					$respuesta = $this->Document->resolverConsulta($parametros_busqueda);

					//$respuesta es un array si los parametros son validos, y sino, 
					//es un string que indica un mensaje de error que describe el
					//tipo de invalidez.
					if (is_array($respuesta))
					{
						//Los resultados de la busqueda los almaceno en la
						//variable $lista_resultados.
						$this->set('lista_resultados', $respuesta);
					}
					else
					{
						//La descripcion del error la guardo en la variable $error.
						$this->set('error', $respuesta);
					}
				}
			}
		}



		/*Desc: Estas son funciones auxiliares para resolver la busqueda.
		  separarParametros interpreta los datos ingresados por el usuario y los devuelve
		  en un array estructurado de una forma fija con la cual va a trabajar el resto 
		  del algoritmo.
		*/
		private function separarParametros($array_form)
		{
			$arrayAux = array(
				'busq_fecha_creacion' => ($this->gp('inp_busq_fecha_creacion','off',$array_form))=='on',
				'busq_fecha_ingreso' => ($this->gp('inp_busq_fecha_ingreso','off',$array_form))=='on',
				'busq_fecha_egreso' => ($this->gp('inp_busq_fecha_egreso','off',$array_form))=='on',
				'archivados_no_archivados' => ($this->gp('inp_archivados_no_archivados','ambos',$array_form)),
				'busq_tipo_movimiento' => ($this->gp('inp_busq_tipo_movimiento','off',$array_form))=='on',
				'entrada' => ($this->gp('inp_entrada','off',$array_form))=='on',
				'salida' => ($this->gp('inp_salida','off',$array_form))=='on',
				'operador_fecha_creacion1' => $this->gp('inp_operador_fecha_creacion1','igual',$array_form),
				'fecha_creacion1' => $this->gp('inp_fecha_creacion1','1/1/1',$array_form),
				'operador_fecha_creacion2' => $this->gp('inp_operador_fecha_creacion2','nada',$array_form),
				'fecha_creacion2' => $this->gp('inp_fecha_creacion2','1/1/1',$array_form),
				'operador_fecha_ingreso1' => $this->gp('inp_operador_fecha_ingreso1','igual',$array_form),
				'fecha_ingreso1' => $this->gp('inp_fecha_ingreso1','1/1/1',$array_form),
				'operador_fecha_ingreso2' => $this->gp('inp_operador_fecha_ingreso2','nada',$array_form),
				'fecha_ingreso2' => $this->gp('inp_fecha_ingreso2','1/1/1',$array_form),
				'operador_fecha_egreso1' => $this->gp('inp_operador_fecha_egreso1','igual',$array_form),
				'fecha_egreso1' => $this->gp('inp_fecha_egreso1','1/1/1',$array_form),
				'operador_fecha_egreso2' => $this->gp('inp_operador_fecha_egreso2','nada',$array_form),
				'fecha_egreso2' => $this->gp('inp_fecha_egreso2','1/1/1',$array_form),
				'busq_tipo' => ($this->gp('inp_busq_tipo','off',$array_form))=='on',
				'tipo' => ($this->gp('inp_tipo','notas',$array_form)),
				'busq_proposito' => ($this->gp('inp_busq_proposito','off',$array_form))=='on',
				'solicitudes' => ($this->gp('inp_solicitudes','off',$array_form))=='on',
				'respuestas' => ($this->gp('inp_respuestas','off',$array_form))=='on',
				'notificaciones' => ($this->gp('inp_notificaciones','off',$array_form))=='on',
				'asunto' => ($this->gp('inp_asunto','',$array_form)),
				'observacion' => ($this->gp('inp_observacion',null,$array_form)),
				'autor' => ($this->gp('inp_autor',0,$array_form)),
				'destinatario1' => ($this->gp('inp_destinatario_1',0,$array_form)),
				'destinatario2' => ($this->gp('inp_destinatario_2',0,$array_form)),
				'destinatario3' => ($this->gp('inp_destinatario_3',0,$array_form)),
				'dependencia_local' => ($this->getUserDependency()),
				'dependencia_externa' => ($this->gp('inp_dependencia_externa',0,$array_form)),
			);

			return $arrayAux;
		}


		/*Desc: Esta funcion unicamente sirve para ahorrar codigo. Lo que hace es, asignar
		  un valor por default en caso de no estar definida.
		*/
		private function gp ($nombre, $default, $array_form)
		{
			return (isset($array_form[$nombre])?$array_form[$nombre]:$default);
		}




		/*Desc: Lista los documentos que no estan archivados para que el usuario elija
		  algunos con el fin de asociar esos documentos con el de trabajo.
		  Para eso, recibe como parametro el id del documento de trabajo.
		*/
		function asociar_documento ($id)
		{
			if (isset($id))
			{
				//Primero verifico que el documento exista. Para eso primero hago una
				//consulta por el numero de id.
				$documento = $this->Document->findByid($id);

				if (empty($documento))
				{
					//Si el array esta vacio es porque no existe ningun documento con ese
					//id.
					$this->set('error', 'Documento inexistente');
				}
				else
				{
					//Guardo la lista de documentos sin archivar en la variable
					//$lista_documentos_sin_archivar.
					$this->set('lista_documentos_sin_archivar', $this->Document->obtenerDocumentosSinArchivar());
					//Ademas debo pasar el id para identificar el documento de trabajo.
					$this->set('id', $id);
				}
			}
		}



		/*Desc: Muestra los datos completos del documento seleccionado y la lista de todos los documentos asociados a el.
		*/
		function ver_datos_y_documentos_relacionados ($id)
		{
			if (isset($id))
			{
				//Primero obtengo los datos del documento en cuestion.
				$this->ver($id);

				//Ahora debo obtener la lista de documentos asociados y sus datos.
				$this->set('lista_documentos_relacionados',$this->Document->obtenerDocumentosRelacionados($id));
			}
		}



		/*Desc: Muestra los datos completos del documento seleccionado.
		*/
		function ver ($id)
		{
			if (isset($id))
			{
				//Obtengo los datos del documento en cuestion.
				$documento = $this->Document->findByid($id);
				$this->set('datos_documento', $documento);
				$this->set('destinatarios_documento', $this->requestAction("People/obtenerDestinatarios/$id"));
			}
		}
		
		function guardarProvidencia( $id_expediente, $data )
		{
			if( $this->Document->getTipoDescripcion($data['Document']['tipo']) == 'Expediente'
				&& ( !empty($data['Document']['providenciaAsunto']) || !empty($data['Document']['providenciaObservaciones']) ))
			{
				//Tengo que guardar una providencia asociada al expediente
				$providencia = array(    
					'proposito' => $data['Document']['proposito'], 
					'tipo' => 5, //providencia
					'fecha_creacion' => $data['Document']['fecha_creacion'],
					'asunto' => $data['Document']['providenciaAsunto'],
					'observacion' => $data['Document']['providenciaObservaciones'],
					'despacho' => 2,
					'movimiento' => 0,
					'fecha_egreso' => $data['Document']['fecha_egreso'],
					'id_expediente' => $id_expediente,
					'id_dependencia' => $data['Document']['id_dependencia'] );
				
				$this->Document->create();
				$this->Document->save( $providencia , false);
			}
		}
		
	}
?>
